import sys
import re
import baiduWenkuDownload.wenku_ppt
import baiduWenkuDownload.wenku_word
import baiduWenkuDownload.wenku_pdf

from PyQt6.QtWidgets import QApplication, QWidget, QLabel, QLineEdit, QPushButton, QHBoxLayout, QVBoxLayout, QComboBox, \
    QMessageBox
from PyQt6.QtGui import QIcon

class MyWindow(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle('百度文库')
        self.setGeometry(400, 300, 320, 160) # 设置窗位置和大小
        self.setWindowIcon(QIcon("./wenku.png"))

        # 实例化标签
        lab_url = QLabel('链接：')
        # 单行文本编辑框
        url = QLineEdit()

        lab_cbox = QLabel('类型：')

        #下拉框
        comboxList = QComboBox()
        # 单个添加条目
        comboxList.addItem('ppt')
        comboxList.addItem('pdf(图片型)')
        comboxList.addItem('pdf(文字型)')
        comboxList.addItem('pdf(介绍文字+图片型)')
        comboxList.addItem('word')
        # comboxlist.bind("<<ComboboxSelected>>", xFunc)  # #给下拉菜单绑定事件

        # 确定按钮
        btn_ok = QPushButton('确定')
        def ok():
            text = url.text()

            # 首先判断是不是百度文库的链接
            prefix = "https://wenku.baidu.com/view/"
            if text[:len(prefix)] == prefix:
                flag = True
            else:
                flag = False

            # 如果不是，则弹窗提示
            if flag == False:
                QMessageBox.warning(self, "警告", "输入无效链接！")

            # 如果是，则把docId提取出来,进行下载
            if flag == True:
                pattern = r"https://wenku.baidu.com/view/([^/]+)\.html"
                match = re.search(pattern, text)

                #匹配成功就进行截取
                if match:
                    doc_id = match.group(1)
                else:
                    QMessageBox.warning(self, "警告", "链接格式错误！")

                #获取下拉框选择的值，根据类型调用不同爬虫进行下载
                selected_value = comboxList.currentText()
                if selected_value == "ppt" or selected_value == "pdf(图片型)":
                    download_ppt = wenku_ppt.ppt()
                    ppt_url = download_ppt.create_url(doc_id)
                    result = download_ppt.download(ppt_url)
                    if result == True:
                        QMessageBox.information(None, "提示", "下载成功，请E盘根目录下查看")
                    else:
                        QMessageBox.critical(None, "错误", "下载失败")

                if selected_value == "word" or selected_value == "pdf(文字型)":
                    download_word = wenku_word.word()
                    word_url = download_word.create_url(doc_id)
                    result = download_word.download(word_url)
                    if result == True:
                        QMessageBox.information(None, "提示", "下载成功，请E盘根目录下查看")
                    else:
                        QMessageBox.critical(None, "错误", "下载失败")


                if selected_value == "word" or selected_value == "pdf(介绍文字+图片型)":
                    download_pdf = wenku_pdf.pdf()
                    pdf_url = download_pdf.create_url(doc_id)
                    result = download_pdf.download(pdf_url)
                    if result == True:
                        QMessageBox.information(None, "提示", "下载成功，请E盘根目录下查看")
                    else:
                        QMessageBox.critical(None, "错误", "下载失败")

        btn_ok.clicked.connect(ok)

        #取消按钮
        btn_cancel = QPushButton('取消')
        #绑定事件
        def cancle():
            url.clear()
            comboxList.setCurrentIndex(0)
        btn_cancel.clicked.connect(cancle)

        # 使用水平布局管理器布局lab_url控件和url控件，左右留白10像素
        hbox_url = QHBoxLayout() #水平布局管理器
        hbox_url.addSpacing(10)  #水平布局间隔
        hbox_url.addWidget(lab_url) #将实例化标签账号放入
        hbox_url.addWidget(url) #将#单行文本编辑框放入
        hbox_url.addSpacing(10)
        # 使用水平布局管理器布局lab_cbox控件和combox控件，左右留白10像素
        hbox_cbox = QHBoxLayout()
        hbox_cbox.addSpacing(10)
        hbox_cbox.addWidget(lab_cbox)
        hbox_cbox.addWidget(comboxList)
        hbox_cbox.addSpacing(200)
        # 使用水平布局管理器布局btn_ok控件和btn_cancel控件
        hbox_btn = QHBoxLayout() # 水平布局管理器
        hbox_btn.addStretch(5) # 设置左侧拉伸因子
        hbox_btn.addWidget(btn_ok) # 添加btn_ok控件
        hbox_btn.addWidget(btn_cancel) # 添加btn_cancel控件
        hbox_btn.addStretch(1) # 设置右侧拉伸因子
        # 使用垂直布局管理器布局上面3个水平布局管理器
        vbox = QVBoxLayout()
        vbox.addSpacing(10)
        vbox.addLayout(hbox_url)
        vbox.addSpacing(5)
        vbox.addLayout(hbox_cbox)
        vbox.addStretch(1)
        vbox.addLayout(hbox_btn)
        vbox.addSpacing(10)
        # 将垂直布局管理器应用到窗口
        self.setLayout(vbox)
        self.show()




if __name__ == '__main__':
    app = QApplication(sys.argv)
    win = MyWindow()
    sys.exit(app.exec())
